// 路由白名单，不需要登录就可以访问的页面
const whiteList = [
	'/pages/index/index',
	'/pages/notice/index',
	'/pages/login/index',
	'/pages/register/index',
	'/pages/user/index'
]

// 检查是否需要登录
export function checkNeedLogin(url) {
	if (!url) {
		console.log('检查路由: url为空')
		return true
	}

	// 判断是否在白名单中
	const isWhiteList = whiteList.some(path => {
		const isMatch = url.startsWith(path)
		console.log('检查路由:', url, '匹配路径:', path, '是否匹配:', isMatch)
		return isMatch
	})

	console.log('最终结果 - 路由:', url, '是否在白名单中:', isWhiteList, '是否需要登录:', !isWhiteList)
	return !isWhiteList
}

// 获取token
export function getToken() {
	const token = uni.getStorageSync('token')
	const expire = uni.getStorageSync('expire')
	console.log('从本地存储获取token:', token, '过期时间:', expire)
	return {
		token,
		expire
	}
}

// 清除token
export function removeToken() {
	console.log('清除token')
	uni.removeStorageSync('token')
	uni.removeStorageSync('expire')
	uni.removeStorageSync('userInfo')
}

// 设置token和过期时间
export function setToken(token, expire) {
	console.log('设置token:', token, '过期时间:', expire)
	if (!token) {
		console.warn('token为空，设置失败')
		return
	}

	try {
		// 直接存储token，不添加Bearer前缀
		uni.setStorageSync('token', token)
		// expire是剩余的有效时间（毫秒），直接使用
		uni.setStorageSync('expire', expire)
		console.log('token设置成功，token:', token, '过期时间:', expire)
	} catch (error) {
		console.error('token设置失败:', error)
	}
}

// 检查是否已登录
export function checkIsLoggedIn() {
	const tokenInfo = getToken()
	console.log('检查是否已登录，当前token信息:', tokenInfo)

	if (!tokenInfo.token) {
		console.log('未登录：token不存在')
		return false
	}

	// 检查token是否过期
	if (tokenInfo.expire) {
		console.log('当前token剩余有效时间:', tokenInfo.expire, '毫秒')
		const isValid = tokenInfo.expire > 0
		console.log('token是否有效:', isValid)
		return isValid
	}

	// 如果没有设置过期时间，则认为token有效
	console.log('token有效：未设置过期时间')
	return true
}

// 跳转到登录页
export function redirectToLogin() {
	console.log('重定向到登录页')
	uni.navigateTo({
		url: '/pages/login/index'
	})
}

// 检查是否是维修人员
export function checkIsRepairer() {
	try {
		const userInfo = uni.getStorageSync('userInfo')
		// 统一使用 userType 字段，1 代表维修人员
		return userInfo && userInfo.userType === 1
	} catch (e) {
		console.error('获取用户角色信息失败:', e)
		return false
	}
	return true
}

// 检查维修人员是否可以访问页面
export function checkRepairerAccess(url) {
	// 维修人员不能访问报修页面 /pages/repair/index
	if (url.indexOf('/pages/repair/index') !== -1) {
		if (checkIsRepairer()) {
			console.log('维修人员尝试访问报修页面 (userType=1)，需要拦截')
			return false // 不允许访问
		}
	}
	return true // 允许访问
}